home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Browsers, Managers & Extensions / CookieSwap 0.5 / cookieswap-0.5.0-fx.xpi / chrome / chromeFiles / content / cookieSwap.js < prev    next >
Text File  |  2007-07-22  |  14KB  |  331 lines

  1. // *****************************************************************************
  2. // *                          cookieSwap.js                                    *
  3. // * These are the functions that glue all the CookieSwap classes together.    *
  4. // *  It acts as the dividing line between the front-end and back-end.         *
  5. // * It is the high level code that coordinates the cookie swaps.              *
  6. // *                                                                           *
  7. // ************************** Coding Standards *********************************
  8. // *  gMyVariable     - global variable (starts with "g", then mixed case)     *
  9. // *  myVariable      - variables passed into functions                        *
  10. // *  my_variable     - local variable inside of a function                    *
  11. // *  this.myVariable - class attributes/variable (mixed case & always         *
  12. // *                    referenced with "this.")                               *
  13. // *  MyFunction      - functions are always mixed case                        *
  14. // *  MY_CONSTANT     - constants are all caps with underscores                *
  15. // *                                                                           *
  16. // *************************** Revision History ********************************
  17. // *  Name       Date       BugzID  Action                                     *
  18. // *  ---------  ---------  -----   ------                                     *
  19. // *  SteveTine  28Dec2005  12561   Initial Creation                           *
  20. // *  SteveTine  15Jan2005  12751   Stop-gap solution to multiple window prob  *
  21. // *  SteveTine  18Jan2005  12855   Prompt the user before removing all cookies*
  22. // *                                                                           *
  23. // ************************* BEGIN LICENSE BLOCK *******************************
  24. // * Version: MPL 1.1                                                          *
  25. // *                                                                           *
  26. // *The contents of this file are subject to the Mozilla Public License Version*
  27. // * 1.1 (the "License"); you may not use this file except in compliance with  *
  28. // * the License. You may obtain a copy of the License at                      *
  29. // * http://www.mozilla.org/MPL/                                               *
  30. // *                                                                           *
  31. // * Software distributed under the License is distributed on an "AS IS" basis,*
  32. // * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License  *
  33. // * for the specific language governing rights and limitations under the      *
  34. // * License.                                                                  *
  35. // *                                                                           *
  36. // * The Original Code is the CookieSwap Mozilla/Firefox Extension             *
  37. // *                                                                           *
  38. // * The Initial Developer of the Original Code is                             *
  39. // * Steven Tine.                                                              *
  40. // * Portions created by the Initial Developer are Copyright (C) 2006          *
  41. // * the Initial Developer. All Rights Reserved.                               *
  42. // *                                                                           *
  43. // * Contributor(s): Steven Tine                                               *
  44. // *                                                                           *
  45. // **************************END LICENSE BLOCK**********************************
  46.  
  47. //This constant defines if debug to stdout is enable or not.
  48. const COOKIE_SWAP_DEBUG_ENABLED=false;
  49. var   gExtensionActive=true;
  50.  
  51. //Since the CookieSwapProfileManager is a Singleton Service, store it as a global
  52. //  once instantiated
  53. var   gCsProfileMgr=null;
  54.  
  55. //Called only once at browser startup
  56. function cookieswap_init(event)
  57. {
  58.    cookieswap_dbg("START cookieswap_init");
  59.    
  60.    //Deregister this init function since we only want to run it once
  61.    window.removeEventListener("load", cookieswap_init, true);
  62.  
  63.    var profile_UI = profileUI_getInstance();
  64.  
  65.    // instantiate CookieSwap profile manager component object
  66.    gCsProfileMgr = Components.classes["@cookieswap.mozdev.org/profile/manager-service;1"].
  67.                              getService(Components.interfaces.nsIProfile);
  68.    cookieswap_dbg("Created ProfileMgr Service");
  69.  
  70.    //Register the window observer
  71.    var observer = new cookieswap_Observer();
  72.  
  73.    //Set the global var to indicate that cookieSwap is active in this browser
  74.    //TODO: Dump this var
  75.    gExtensionActive=true;
  76.       
  77.    //Register the function that is to be called when a user selected to
  78.    //  change the profile
  79.    profile_UI.registerProfileSelectedCallback(cookieswap_profileChangeSelected);
  80.  
  81.    var obj = Object();
  82.    var profile_array;
  83.  
  84.    //obj.value is the count, profile_array is the array
  85.    cookieswap_dbg("calling csProfileMgr.getProfileList");
  86.    profile_array = gCsProfileMgr.getProfileList(obj);
  87.    
  88.    cookieswap_dbg("ProfileMgr says " + obj.value + " profiles exist");
  89.    //Populate the UI with the profiles available
  90.    for(var i=0; i<obj.value; i++)
  91.    {
  92.       cookieswap_dbg("adding profile:" + profile_array[i]);
  93.       profile_UI.addProfileToList(profile_array[i], i);
  94.    }
  95.  
  96.    //Show the currently active profile as active on the UI
  97.    profile_UI.showProfileAsActive(gCsProfileMgr.currentProfile);
  98.  
  99.    cookieswap_dbg("END cookieswap_init");
  100. }
  101.  
  102. //This function is registered with the ProfileUI class and is called
  103. //  whenever the user selects a new cookie profile (or the same profile)
  104. //In the case where the same profile is selected, the cookies are copied
  105. //  to the profile storage area.
  106. function cookieswap_profileChangeSelected(profileID)
  107. {
  108.    cookieswap_dbg("START switchProfile to " + profileID);
  109.  
  110.    gCsProfileMgr.currentProfile = profileID;
  111.  
  112.    //The only reason this should fail is if the ProfileManager 
  113.    //  couldn't swap to the requested profile
  114.    if (gCsProfileMgr.currentProfile != profileID)
  115.    {
  116.       alert("[cookieswap] Internal error, swap not successful");
  117.    }
  118.    
  119.    cookieswap_dbg("END switchProfile");
  120. }
  121.  
  122. function cookieswap_runGeneric()
  123. {
  124.    var dnsCacheVal;
  125.  
  126.    cookieswap_dbg("START runGeneric()");
  127.  
  128.    //This was something that I was playing with to flush the Firefox DNS cache.
  129.    //To flush the cache, set the network.dnsCacheExipration config value to 0 
  130.    //  (invalidating all entries) then set it back to the original value 
  131.    //  (so new entries get cached again). 
  132.    //
  133.    //Obviously this is something that doesn't belong in CookieSwap, but I had a need for
  134.    //  it and didn't feel like writing a new extension just to do this so it is
  135.    //  stuck in here oddly.
  136.    var net_pref = Components.classes['@mozilla.org/preferences-service;1']
  137.                  .getService(Components.interfaces.nsIPrefService);
  138.  
  139.    net_pref = net_pref.getBranch('network.');
  140.    dnsCacheVal = net_pref.getIntPref('dnsCacheExpiration'); 
  141.    //Setting the exipration to 0 will invalidate all cached entries
  142.    net_pref.setIntPref('dnsCacheExpiration', 0); 
  143.    //Now set the expiration back to the original value to cause entries to
  144.    //  be cached again.
  145.    net_pref.setIntPref('dnsCacheExpiration', dnsCacheVal); 
  146.    cookieswap_dbg("Set network.dnsCacheExpiration to 0 then back to " + dnsCacheVal);
  147.  
  148.    cookieswap_dbg("END runGeneric()");
  149. }
  150.  
  151. function cookieswap_UiRemoveAllCookies()
  152. {
  153.    var do_remove = window.confirm("Are you sure you want to remove all the cookies in this profile?");
  154.  
  155.    //If user was sure, remove the cookies
  156.    if (do_remove == true)
  157.    {
  158.       cookieswap_removeAllCookies();
  159.    }
  160. }
  161.  
  162. function cookieswap_UiRemoveAllCookiesInAllProfiles()
  163. {
  164.    var do_remove = window.confirm("Are you sure you want to remove all the cookies in all profiles?");
  165.  
  166.    //If user was sure, remove the cookies
  167.    if (do_remove == true)
  168.    {
  169.       var obj = Object();
  170.       var profile_array;
  171.  
  172.       //First remove the cookies in browser memory
  173.       cookieswap_removeAllCookies();
  174.  
  175.       //Get the list of all profiles
  176.       profile_array = gCsProfileMgr.getProfileList(obj);
  177.    
  178.       //Remove the cookies in each profile
  179.       for(var i=0; i<obj.value; i++)
  180.       {
  181.          cookieswap_dbg("Clearing cookies in " + profile_array[i]);
  182.          //The false specifies to delete the contents not the file/profile
  183.          gCsProfileMgr.deleteProfile(profile_array[i], false);
  184.       }
  185.  
  186.       cookieswap_dbg("All cookies removed");
  187.    }
  188. }
  189.    
  190. function cookieswap_removeAllCookies()
  191. {
  192.    var cookie_mgr = ffGetCookieManager();
  193.    cookie_mgr.removeAll();
  194.    cookieswap_dbg("All cookies removed");
  195. }
  196.  
  197.  
  198. function cookieswap_turnOnDebug()
  199. {
  200.    //I don't know the details here...I found this on a Mozilla example web page but it enables
  201.    //  all "dump()" command to be sent to STDOUT and can be seen when firefox.exe is run from a
  202.    //  command window.
  203.    const PREFS_CID      = "@mozilla.org/preferences;1";
  204.    const PREFS_I_PREF   = "nsIPref";
  205.    const PREF_STRING    = "browser.dom.window.dump.enabled";
  206.    try 
  207.    {
  208.        var Pref        = new Components.Constructor(PREFS_CID, PREFS_I_PREF);
  209.        var pref        = new Pref( );
  210.        pref.SetBoolPref(PREF_STRING, true);
  211.    } catch(e) {}
  212.  
  213.    cookieswap_dbg("Testing STDOUT...debug on!");
  214. }
  215.  
  216. function cookieswap_statusBarDblClick()
  217. {
  218. //------------------UNIT TEST CODE--------------------------
  219. // This is used for anything right now other than to
  220. // exercise all the methods on the XPCOM component.
  221. // This code is only enabled in DEBUG mode.
  222. //----------------------------------------------------------
  223. if(COOKIE_SWAP_DEBUG_ENABLED == true)
  224. {
  225.   cookieswap_dbg("calling notify");
  226.   Components.classes["@mozilla.org/observer-service;1"]
  227.            .getService(Components.interfaces.nsIObserverService)
  228.            .notifyObservers(null, "cookieswap_swap", "someAdditionalInformationPassedAs'Data'Parameter");
  229.   cookieswap_dbg("called notify");
  230.  
  231.   // instantiate component object
  232.   var oProfileMgr = Components.classes["@cookieswap.mozdev.org/profile/manager-service;1"].
  233.                                getService(Components.interfaces.nsIProfile);
  234.                                //createInstance(Components.interfaces.nsIProfile);
  235.   cookieswap_dbg("Created ProfileMgr");
  236.  
  237.   //--cloneProfile
  238.   oProfileMgr.cloneProfile("test");
  239.   cookieswap_dbg("Cloned Profile");
  240.  
  241.   //--profileCount
  242.   cookieswap_dbg("Profile Count = " + oProfileMgr.profileCount);
  243.  
  244.   //--createNewProfile
  245.   oProfileMgr.createNewProfile("test1", "test1dir", "", true);
  246.  
  247.   //--deleteProfile
  248.   oProfileMgr.deleteProfile("test1", true);
  249.   oProfileMgr.deleteProfile("test1", false);
  250.  
  251.   //--getProfileList
  252.   var obj = Object();
  253.   var profile_array;
  254.   
  255.   profile_array = oProfileMgr.getProfileList(obj);
  256.   cookieswap_dbg("obj.value = " + obj.value);
  257.   cookieswap_dbg("profile_array[0] = " + profile_array[0]);
  258.   cookieswap_dbg("profile_array[1]= " + profile_array[1]);
  259.  
  260.   //--profileExists
  261.   cookieswap_dbg("test exists = " + oProfileMgr.profileExists("test"));
  262.   cookieswap_dbg("test1 exists = " + oProfileMgr.profileExists("test1"));
  263.  
  264.   //renameProfile
  265.   oProfileMgr.renameProfile("test", "test2");
  266.  
  267.   //shutDownCurrentProfile
  268.   oProfileMgr.shutDownCurrentProfile(Components.interfaces.nsIProfile.SHUTDOWN_PERSIST);
  269.   oProfileMgr.shutDownCurrentProfile(Components.interfaces.nsIProfile.SHUTDOWN_CLEANSE);
  270.  
  271.   cookieswap_dbg("currentProfile = " + oProfileMgr.currentProfile);
  272.   oProfileMgr.currentProfile = "test1";
  273.   cookieswap_dbg("currentProfile = " + oProfileMgr.currentProfile);
  274.   oProfileMgr.currentProfile = "test2";
  275.   cookieswap_dbg("currentProfile = " + oProfileMgr.currentProfile);
  276. }
  277. }
  278.  
  279. function cookieswap_dbg(str)
  280. {
  281.    if(COOKIE_SWAP_DEBUG_ENABLED == true)
  282.   {
  283.       //To log to the javascript console (Tools->Error Console) use these lines
  284.       //var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
  285.       //                           .getService(Components.interfaces.nsIConsoleService);
  286.       //consoleService.logStringMessage("[cookieswap]" + str );
  287.  
  288.       dump("[cookieswap]" + str + "\n");
  289.  
  290.    }
  291. }
  292.  
  293. function cookieswap_manageProfiles()
  294. {
  295.    var profile_ctnr = CookieProfileContainer_getInstance();
  296.  
  297.    alert("Sorry...this feature will be in a future release.\n" +
  298.          "Until then, you can add, delete and rename profiles by closing the broswer and \n" +
  299.          "changing the filenames in this dir:\n" +
  300.           profile_ctnr.profileDir.path + "\n" +
  301.           "On Windows, some of these directories may be hidden.  Use Tools->FolderOptions->View->ShowHiddenFilesAndFolders\n" +
  302.           "in the Windows file explorer window to see these hidden directories.\n\n" +
  303.           "See http://cookieswap.mozdev.org/help.html for detailed instructions.\n");
  304. }
  305.  
  306. function cookieswap_Observer()
  307. {
  308.   this.register();
  309. }
  310. cookieswap_Observer.prototype = {
  311.   observe: function(subject, topic, data) {
  312.    // Do your stuff here.
  313.    cookieswap_dbg("Observer called! " + data);
  314.    //TODO, getInstance feels heavy here
  315.    var profile_UI = profileUI_getInstance();
  316.    profile_UI.showProfileAsActive(data);
  317.   },
  318.   register: function() {
  319.     var observerService = Components.classes["@mozilla.org/observer-service;1"]
  320.                           .getService(Components.interfaces.nsIObserverService);
  321.     observerService.addObserver(this, "cookieswap_swap", false);
  322.   },
  323.   unregister: function() {
  324.     var observerService = Components.classes["@mozilla.org/observer-service;1"]
  325.                             .getService(Components.interfaces.nsIObserverService);
  326.     observerService.removeObserver(this, "cookieswap_swap");
  327.   }
  328. }
  329.  
  330.  
  331.